package org.example.struct.array;

import com.alibaba.fastjson.JSON;

import java.util.Arrays;

/**
 * @author liyishan
 * @date 2023/8/3 09:37
 * @apiNote   最短不连续递增子序列
 */

public class Test00581FindUnsortedSubarray {
    public static void main(String[] args) {
        int[] nums = {2, 6, 4, 8, 10, 9, 15};
        System.out.println(JSON.toJSON(test(nums)));
    }

    /**
     * 拷贝一份排序后的数组   从前往后对比找到第一个不同的    从后往前对象找到第一个不同的   中间的就是需要排序的
     * @param nums
     * @return
     */
    public static int test(int[] nums) {
        if (isSorted(nums)) {
            return 0;
        }
        int[] temp = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            temp[i] = nums[i];
        }
        Arrays.sort(temp);
        int left = 0;
        while(nums[left] == temp[left]){
            left++;
        }
        int right = nums.length - 1;
        while(nums[right] == temp[right]){
            right--;
        }
        return right - left + 1;

    }

    public static boolean isSorted(int[] nums) {
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] < nums[i - 1]) {
                return false;
            }
        }
        return true;
    }


    /**
     * max right 从左往右遍历  不符合递增则记录下标
     * min left  从右往左遍历  不符合递减则记录下标
     * @param nums
     * @return
     */
    public static int test1(int[] nums) {
        int n = nums.length;
        int max = Integer.MIN_VALUE,right = -1;
        int min = Integer.MAX_VALUE, left = -1;
        for(int i = 0;i<n;i++){
            if(nums[i] <max){
                right =i;
            }else {
                max = nums[i];
            }
            if(nums[n-i-1] > min){
                left = n-i-1;
            }else{
                min = nums[n-i-1];
            }
        }
        return right == -1 ? 0 :right-left +1;
    }


}
